home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / openssl / ec.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-04-25  |  9.4 KB  |  244 lines

  1. /* crypto/ec/ec.h */
  2. /* ====================================================================
  3.  * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer. 
  11.  *
  12.  * 2. Redistributions in binary form must reproduce the above copyright
  13.  *    notice, this list of conditions and the following disclaimer in
  14.  *    the documentation and/or other materials provided with the
  15.  *    distribution.
  16.  *
  17.  * 3. All advertising materials mentioning features or use of this
  18.  *    software must display the following acknowledgment:
  19.  *    "This product includes software developed by the OpenSSL Project
  20.  *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  21.  *
  22.  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  23.  *    endorse or promote products derived from this software without
  24.  *    prior written permission. For written permission, please contact
  25.  *    openssl-core@openssl.org.
  26.  *
  27.  * 5. Products derived from this software may not be called "OpenSSL"
  28.  *    nor may "OpenSSL" appear in their names without prior written
  29.  *    permission of the OpenSSL Project.
  30.  *
  31.  * 6. Redistributions of any form whatsoever must retain the following
  32.  *    acknowledgment:
  33.  *    "This product includes software developed by the OpenSSL Project
  34.  *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  35.  *
  36.  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  37.  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  38.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  39.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
  40.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  42.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  43.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  44.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  45.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  46.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  47.  * OF THE POSSIBILITY OF SUCH DAMAGE.
  48.  * ====================================================================
  49.  *
  50.  * This product includes cryptographic software written by Eric Young
  51.  * (eay@cryptsoft.com).  This product includes software written by Tim
  52.  * Hudson (tjh@cryptsoft.com).
  53.  *
  54.  */
  55.  
  56. #ifndef HEADER_EC_H
  57. #define HEADER_EC_H
  58.  
  59. #ifdef OPENSSL_NO_EC
  60. #error EC is disabled.
  61. #endif
  62.  
  63. #include <openssl/bn.h>
  64. #include <openssl/symhacks.h>
  65.  
  66. #ifdef  __cplusplus
  67. extern "C" {
  68. #endif
  69.  
  70.  
  71. typedef enum {
  72.     /* values as defined in X9.62 (ECDSA) and elsewhere */
  73.     POINT_CONVERSION_COMPRESSED = 2,
  74.     POINT_CONVERSION_UNCOMPRESSED = 4,
  75.     POINT_CONVERSION_HYBRID = 6
  76. } point_conversion_form_t;
  77.  
  78.  
  79. typedef struct ec_method_st EC_METHOD;
  80.  
  81. typedef struct ec_group_st
  82.     /*
  83.      EC_METHOD *meth;
  84.      -- field definition
  85.      -- curve coefficients
  86.      -- optional generator with associated information (order, cofactor)
  87.      -- optional extra data (TODO: precomputed table for fast computation of multiples of generator)
  88.     */
  89.     EC_GROUP;
  90.  
  91. typedef struct ec_point_st EC_POINT;
  92.  
  93.  
  94. /* EC_METHODs for curves over GF(p).
  95.  * EC_GFp_simple_method provides the basis for the optimized methods.
  96.  */
  97. const EC_METHOD *EC_GFp_simple_method(void);
  98. const EC_METHOD *EC_GFp_mont_method(void);
  99. #if 0
  100. const EC_METHOD *EC_GFp_recp_method(void); /* TODO */
  101. const EC_METHOD *EC_GFp_nist_method(void); /* TODO */
  102. #endif
  103.  
  104.  
  105. EC_GROUP *EC_GROUP_new(const EC_METHOD *);
  106. void EC_GROUP_free(EC_GROUP *);
  107. void EC_GROUP_clear_free(EC_GROUP *);
  108. int EC_GROUP_copy(EC_GROUP *, const EC_GROUP *);
  109.  
  110. const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *);
  111.     
  112.  
  113. /* We don't have types for field specifications and field elements in general.
  114.  * Otherwise we could declare
  115.  *     int EC_GROUP_set_curve(EC_GROUP *, .....);
  116.  */
  117. int EC_GROUP_set_curve_GFp(EC_GROUP *, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *);
  118. int EC_GROUP_get_curve_GFp(const EC_GROUP *, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *);
  119.  
  120. /* EC_GROUP_new_GFp() calls EC_GROUP_new() and EC_GROUP_set_GFp()
  121.  * after choosing an appropriate EC_METHOD */
  122. EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *);
  123.  
  124. int EC_GROUP_set_generator(EC_GROUP *, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
  125. EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *);
  126. int EC_GROUP_get_order(const EC_GROUP *, BIGNUM *order, BN_CTX *);
  127. int EC_GROUP_get_cofactor(const EC_GROUP *, BIGNUM *cofactor, BN_CTX *);
  128.  
  129. EC_POINT *EC_POINT_new(const EC_GROUP *);
  130. void EC_POINT_free(EC_POINT *);
  131. void EC_POINT_clear_free(EC_POINT *);
  132. int EC_POINT_copy(EC_POINT *, const EC_POINT *);
  133.  
  134. const EC_METHOD *EC_POINT_method_of(const EC_POINT *);
  135.  
  136. int EC_POINT_set_to_infinity(const EC_GROUP *, EC_POINT *);
  137. int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *, EC_POINT *,
  138.     const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *);
  139. int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *, const EC_POINT *,
  140.     BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *);
  141. int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *, EC_POINT *,
  142.     const BIGNUM *x, const BIGNUM *y, BN_CTX *);
  143. int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *, const EC_POINT *,
  144.     BIGNUM *x, BIGNUM *y, BN_CTX *);
  145. int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *, EC_POINT *,
  146.     const BIGNUM *x, int y_bit, BN_CTX *);
  147.  
  148. size_t EC_POINT_point2oct(const EC_GROUP *, const EC_POINT *, point_conversion_form_t form,
  149.         unsigned char *buf, size_t len, BN_CTX *);
  150. int EC_POINT_oct2point(const EC_GROUP *, EC_POINT *,
  151.         const unsigned char *buf, size_t len, BN_CTX *);
  152.  
  153. int EC_POINT_add(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *);
  154. int EC_POINT_dbl(const EC_GROUP *, EC_POINT *r, const EC_POINT *a, BN_CTX *);
  155. int EC_POINT_invert(const EC_GROUP *, EC_POINT *, BN_CTX *);
  156.  
  157. int EC_POINT_is_at_infinity(const EC_GROUP *, const EC_POINT *);
  158. int EC_POINT_is_on_curve(const EC_GROUP *, const EC_POINT *, BN_CTX *);
  159. int EC_POINT_cmp(const EC_GROUP *, const EC_POINT *a, const EC_POINT *b, BN_CTX *);
  160.  
  161. int EC_POINT_make_affine(const EC_GROUP *, EC_POINT *, BN_CTX *);
  162. int EC_POINTs_make_affine(const EC_GROUP *, size_t num, EC_POINT *[], BN_CTX *);
  163.  
  164.  
  165. int EC_POINTs_mul(const EC_GROUP *, EC_POINT *r, const BIGNUM *, size_t num, const EC_POINT *[], const BIGNUM *[], BN_CTX *);
  166. int EC_POINT_mul(const EC_GROUP *, EC_POINT *r, const BIGNUM *, const EC_POINT *, const BIGNUM *, BN_CTX *);
  167. int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *);
  168.  
  169.  
  170.  
  171. /* BEGIN ERROR CODES */
  172. /* The following lines are auto generated by the script mkerr.pl. Any changes
  173.  * made after this point may be overwritten when the script is next run.
  174.  */
  175. void ERR_load_EC_strings(void);
  176.  
  177. /* Error codes for the EC functions. */
  178.  
  179. /* Function codes. */
  180. #define EC_F_COMPUTE_WNAF                 143
  181. #define EC_F_EC_GFP_MONT_FIELD_DECODE             133
  182. #define EC_F_EC_GFP_MONT_FIELD_ENCODE             134
  183. #define EC_F_EC_GFP_MONT_FIELD_MUL             131
  184. #define EC_F_EC_GFP_MONT_FIELD_SQR             132
  185. #define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP         100
  186. #define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR         101
  187. #define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE             102
  188. #define EC_F_EC_GFP_SIMPLE_OCT2POINT             103
  189. #define EC_F_EC_GFP_SIMPLE_POINT2OCT             104
  190. #define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE         137
  191. #define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105
  192. #define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128
  193. #define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129
  194. #define EC_F_EC_GROUP_COPY                 106
  195. #define EC_F_EC_GROUP_GET0_GENERATOR             139
  196. #define EC_F_EC_GROUP_GET_COFACTOR             140
  197. #define EC_F_EC_GROUP_GET_CURVE_GFP             130
  198. #define EC_F_EC_GROUP_GET_ORDER                 141
  199. #define EC_F_EC_GROUP_NEW                 108
  200. #define EC_F_EC_GROUP_PRECOMPUTE_MULT             142
  201. #define EC_F_EC_GROUP_SET_CURVE_GFP             109
  202. #define EC_F_EC_GROUP_SET_EXTRA_DATA             110
  203. #define EC_F_EC_GROUP_SET_GENERATOR             111
  204. #define EC_F_EC_POINTS_MAKE_AFFINE             136
  205. #define EC_F_EC_POINTS_MUL                 138
  206. #define EC_F_EC_POINT_ADD                 112
  207. #define EC_F_EC_POINT_CMP                 113
  208. #define EC_F_EC_POINT_COPY                 114
  209. #define EC_F_EC_POINT_DBL                 115
  210. #define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP     116
  211. #define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP     117
  212. #define EC_F_EC_POINT_IS_AT_INFINITY             118
  213. #define EC_F_EC_POINT_IS_ON_CURVE             119
  214. #define EC_F_EC_POINT_MAKE_AFFINE             120
  215. #define EC_F_EC_POINT_NEW                 121
  216. #define EC_F_EC_POINT_OCT2POINT                 122
  217. #define EC_F_EC_POINT_POINT2OCT                 123
  218. #define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP     124
  219. #define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP     125
  220. #define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP     126
  221. #define EC_F_EC_POINT_SET_TO_INFINITY             127
  222. #define EC_F_GFP_MONT_GROUP_SET_CURVE_GFP         135
  223.  
  224. /* Reason codes. */
  225. #define EC_R_BUFFER_TOO_SMALL                 100
  226. #define EC_R_INCOMPATIBLE_OBJECTS             101
  227. #define EC_R_INVALID_ARGUMENT                 112
  228. #define EC_R_INVALID_COMPRESSED_POINT             110
  229. #define EC_R_INVALID_COMPRESSION_BIT             109
  230. #define EC_R_INVALID_ENCODING                 102
  231. #define EC_R_INVALID_FIELD                 103
  232. #define EC_R_INVALID_FORM                 104
  233. #define EC_R_NOT_INITIALIZED                 111
  234. #define EC_R_POINT_AT_INFINITY                 106
  235. #define EC_R_POINT_IS_NOT_ON_CURVE             107
  236. #define EC_R_SLOT_FULL                     108
  237. #define EC_R_UNDEFINED_GENERATOR             113
  238. #define EC_R_UNKNOWN_ORDER                 114
  239.  
  240. #ifdef  __cplusplus
  241. }
  242. #endif
  243. #endif
  244.